package E.哈希表;

/**
 * 想法：如果直接建立hashmap，key是序号 想用contains的话没办法检查数量--所以必须个还是key是对应的char value是出现的频次
 */

import java.util.Arrays;

public class _242_字母异位词 {


    /**
     * 思路1：用int数组来存字符 但是index是处于26个字母中的第几个 所以就用char-‘a’来获得 对应的数组存放则是出现的频率
     * 分别遍历两个toCharArray后的char数组 一个数组来加 一个来减 如果满足字母异位的话 最终int数组遍历肯定都是0
     *
     * ---优化 首先判断最简单的 字符串大小都不相等的情况
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram1(String s, String t) {

        //___________________________优化————————————————————————————————————————————————
        if (s.length() != t.length()){
            return false;
        }
        //__________________________————————————————————————————————————————————————
        char[] s1 = s.toCharArray();
        char[] s2 = t.toCharArray();
        int[] result = new int[26];
        for (char c:s1){
            result[c-'a'] ++;
        }

        for (char c:s2){
            result[c-'a'] --;
        }
        for (int mount:result){
            if (mount!=0){
                return false;
            }

        }


        return true;
    }

    /**
     * 题解思路2：直接用Array的api---对char数组进行重排 然后转string进行equals
     * 但是array的sort是快排 因此时间复杂度会高一些
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram2(String s, String t) {
        char[] s1 = s.toCharArray();
        char[] s2 = t.toCharArray();

        Arrays.sort(s1);
        Arrays.sort(s2);

        //char数组不能直接equals
        if ( !String.valueOf(s1).equals(String.valueOf(s2))){
            return false;
        }

        return true;

    }


}
